Quick SetupのHost Managementを使って、組織内のEC2にIAMロールアタッチ・CloudWatch Agentインストールを自動化する
はじめに
マルチアカウント環境で組織内のEC2インスタンス全てに、SSM管理にするためのIAMロールアタッチとCloudWatch Agentをインストールさせたい時、Quick SetupのHost Managementが便利そうだったので試してみました。
これまであまりみていなかったんですが、AWS Systems ManagerのQuick Setupってこんなに機能(ライブラリ)あるんですね。便利そうなので試していきたい。。
今回触るHost ManagementはEC2インスタンスにAWS Systems Managerを素早く設定する機能で、Agentのインストールやロールの権限を追加することができます。
この機能を組織内のアカウントを対象することができたので、メンバーアカウントに試していきます。
やってみる
前提
今回は既存EC2として以下2つをメンバーアカウント上に用意しています。このEC2はどちらもIAMロールを設定せずに起動だけしている状態です。
- Amazon Linux
- Windows Server
AWS Systems Managerは委任管理者の設定が以下の機能のみとなっていたため、AWS Organizationsの管理アカウント上で設定を行います。
- Change Manager
- Explorer
- OpsCenter
参考:Systems Manager 用の委任管理者のセットアップ - AWS Systems Manager
Quick SetupでHost Managementを設定する
管理アカウント上でAWS Systems Managerのコンソールから、高速セットアップを開いて、Host Managementの「作成」をクリックします。
設定内容の画面に遷移するので、設定オプションを設定していきます。
設定オプションは今回CloudWatch Agentのインストールを行いたいので、1つだけチェックを入れています。
各項目の詳細については公式ドキュメントをご参照ください。
ターゲットは展開先について以下の指定が可能です。
- 組織全体
- 組織内全てのOUとリージョンにデプロイ
- カスタム
- 特定のOU、リージョンを指定してデプロイ
- 現在のアカウント
- 以下のターゲットを選択可能
- リージョン
- タグ
- リソースグループ
- 手動
今回はSandboxのOUを指定、リージョンは東京リージョンのみとしました。
インスタンスプロファイルのオプションは有効化しました。
このオプションは自動でSSM管理に必要な必要な権限をIAMロールにアタッチ、もしくはアタッチ済みのIAMロールに追加してくれるオプションです。
有効化すると、以下のような挙動をします。
- IAMロールが設定されていないEC2
- 「AmazonSSMRoleForInstancesQuickSetup」のIAMロールをアタッチ
- IAMロールがアタッチされているEC2
- AmazonSSMManagedInstanceCore,AmazonSSMPatchAssociationをIAMロールのポリシーに追加
設定に問題がなければ、作成をクリックして完了まで待ちましょう。
EC2への反映確認
メンバーアカウント上のEC2に反映されているか確認してみます。
まずはIAMロールを確認すると、どちらのEC2にもAmazonSSMRoleForInstancesQuickSetup
のロールが自動でアタッチされていました。
次にCloudWatch Agentがインストールされているか確認してみましょう。 まずはWindows Serverにセッションマネージャーでログインして確認してみます。
> Get-WmiObject win32_service -filter "Name LIKE 'AmazonCloudWatchAgent'" | select Name, DisplayName, State, PathName Name DisplayName State PathName ---- ----------- ----- -------- AmazonCloudWatchAgent Amazon CloudWatch Agent Running "C:\Program Files\Amazon\AmazonCloudWatchAgent\start-amazon-cloudwatch-agent.exe"
問題なくインストール・起動していますね。
次にAmazon Linuxの方も確認しましょう。
$ systemctl status amazon-cloudwatch-agent ● amazon-cloudwatch-agent.service - Amazon CloudWatch Agent Loaded: loaded (/etc/systemd/system/amazon-cloudwatch-agent.service; enabled; preset: disabled) Active: active (running) since Fri 2023-07-07 06:05:03 UTC; 13min ago Main PID: 4230 (amazon-cloudwat) Tasks: 6 (limit: 1114)
こちらも問題なくインストール・起動していますね。
自動で設定されていることが確認できました。めでたし。
インスタンスプロファイルのオプションについて
インスタンスプロファイルのオプションを有効化すると、先ほど確認したようにIAMロールのアタッチや既存ロールへのポリシー追加を自動でやってくれます。
裏側でどう実現されているのか気になったので確認してみたのですが、Quick Setupの実態はStackSetsによって展開されたリソース群でした。
メンバーアカウントにはこんなスタックが展開されてます。
リソースを確認すると、SSMドキュメントやステートマネージャーの関連付けなどが含まれていますね。 ということで、自動適用の動作はステートマネージャーで実現されていることがわかります。
IAMロールの設定についてはAWS-QuickSetup-SSMHostMgmt-AttachIAMToInstance-xxxxxx
のステートマネージャー関連付けで実装されているようなので、詳細を確認してみます。
スケジュール式がrate(30 days)
となっているので、約1ヶ月ごとに動いてくれる設定になっているようですね。
参考:リファレンス: Systems Manager の Cron 式および rate 式 - AWS Systems Manager
実際に動いているSSMドキュメントですが、中身までは読むのがしんどかったのでざっくりしかみてません。
動作としては確認した感じ前述した以下の通りなので、そこを認識しておけば大丈夫だと思います。
- IAMロールが設定されていないEC2
- 「AmazonSSMRoleForInstancesQuickSetup」のIAMロールをアタッチ
- IAMロールがアタッチされているEC2
- AmazonSSMManagedInstanceCore,AmazonSSMPatchAssociationをIAMロールのポリシーに追加
新しいEC2を起動しても、このオプションではすぐに反映されないことは覚えてきましょう。すぐに設定したい場合は、「関連付けを今すぐ適用」すれば反映されます。
まとめ
WS Systems Manager Quick SetupのHost Managementを使って組織内のEC2にIAMロールアタッチ・CloudWatch Agentインストールをしてみました。
設定もすぐにできるので、組織内のEC2をとりあえずSSM管理にしたい、CloudWatch Agentを入れたいときは便利そうです。
IAMロールが自動で設定される・権限が追加される点は便利ですが、IaCで管理している環境では管理に影響しそうなので注意したいところですね。